package com.softer.chengxin.role.service.impl;

import com.softer.chengxin.common.domin.*;
import com.softer.chengxin.common.enums.ResultEnum;
import com.softer.chengxin.role.dao.RoleDao;
import com.softer.chengxin.role.entity.Role;
import com.softer.chengxin.role.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2018/10/13
 */
@Service
public class RoleServiceImpl implements RoleService {
    @Autowired
    private RoleDao roleDao;

    /**
     * 删除角色
     *
     * @param id 角色ID
     * @return 处理结果
     */
    @Override
    public CommonResult delete(int id) {
        int num = roleDao.deleteRole(id);
        return getResult(num);
    }

    /**
     * 新增角色
     *
     * @param role 角色信息
     * @return 处理结果
     */
    @Override
    public CommonResult add(Role role) {
        int num = roleDao.addRole(role);
        return getResult(num);
    }

    /**
     * 编辑角色
     *
     * @param role 角色信息
     * @return 处理结果
     */
    @Override
    public CommonResult update(Role role) {
        int num = roleDao.update(role);
        return getResult(num);
    }

    /**
     * 获取角色信息
     *
     * @param id 角色ID
     * @return 角色信息
     */
    @Override
    public Role getRoleInfo(Integer id) {
        return roleDao.getRoleInfo(id);
    }

    /**
     * 查询权限列表
     *
     * @return 权限集合
     */
    @Override
    public List<RoleModules> loadModules() {
        //查询父级菜单
        List<RoleModules> module = roleDao.getModule(Integer.parseInt(Common.ZERO));
        if (module != null) {
            for (RoleModules rolemoduls : module) {
                //查询子菜单
                List<RoleModules> children = roleDao.getModule(rolemoduls.getId());
                rolemoduls.setChildren(children);
            }
            return module;
        }
        return new ArrayList<>();
    }

    /**
     * 获取当前登陆用户创建的角色列表
     *
     * @param loginName 登陆名
     * @return 角色列表
     */
    @Override
    public List<Role> getRoleList(String loginName) {
        return roleDao.getRoleList(loginName);
    }

    /**
     * 页面初始化时，加载角色列表
     *
     * @param page      页面信息
     * @param loginName 登陆名
     * @return 角色列表
     */
    @Override
    public ManagerPageResult load(Page page, String loginName) {
        ManagerPageResult mpr = new ManagerPageResult();
        JsonResult js = new JsonResult();
        int num = roleDao.getRoleNum(loginName);
        mpr.setCount(num);
        if (num <= Integer.parseInt(Common.ZERO)) {
            return mpr;
        }
        List<Role> load = roleDao.load(page, loginName);
        js.setDs(load);
        mpr.setJson(js);
        return mpr;
    }

    /**
     * 返回处理结果
     *
     * @param num 数据库执行的条数
     * @return 结果
     */
    private CommonResult getResult(int num) {
        if (num > Integer.parseInt(Common.ZERO)) {
            return new CommonResult(ResultEnum.SUCCESS.getCode(), Common.OPERATE_SUCCESS);
        }
        return new CommonResult(ResultEnum.FAIL.getCode(), Common.OPERATE_FAIL);
    }
}
